#ifndef ELFPARSER_H
#define ELFPARSER_H

#include <elf.h>
#include <common.h>

#define ELF_ST_TYPE(val) ELF32_ST_TYPE(val)

#ifdef CONFIG_ISA_riscv64
typedef Elf64_Ehdr Elf_Ehdr;
typedef Elf64_Half Elf_Half;
typedef Elf64_Off Elf_Off;
typedef Elf64_Shdr Elf_Shdr;
typedef Elf64_Sym Elf_Sym;
#else
typedef Elf32_Ehdr Elf_Ehdr;
typedef Elf32_Half Elf_Half;
typedef Elf32_Off Elf_Off;
typedef Elf32_Shdr Elf_Shdr;
typedef Elf32_Sym Elf_Sym;
#endif

#define FUNC_NAME_MAX_LEN 128

enum LevelType { LevelLow, LevelHigh };

/* ELF 文件的函数信息 */
typedef struct _FuncEntry {
    char name[FUNC_NAME_MAX_LEN];   // 函数名称
    size_t start;                   // 函数起始地址
    size_t size;                    // 函数范围
    enum LevelType level;           // 函数的层次: am app / navy app
} FuncEntry;

int parse_elf(FILE* fp, size_t offset, size_t size, FuncEntry* func_table, enum LevelType level);

#endif
